/*	--- 复杂匹配规则 --- 

---------------------------------

#	匹配开头和结尾

用正则表达式进行多行匹配时，我们用^表示开头，$表示结尾。例如，^A\d{3}$，可以匹配"A001"、"A380"。


---------------------------------

#	匹配指定范围

如果我们规定一个7~8位数字的电话号码不能以0开头，应该怎么写匹配规则呢？\d{7,8}是不行的，因为第一个\d可以匹配到0。

使用[...]可以匹配范围内的字符，例如，[123456789]可以匹配1~9，这样就可以写出上述电话号码的规则：[123456789]\d{6,7}。

把所有字符全列出来太麻烦，[...]还有一种写法，直接写[1-9]就可以。

要匹配大小写不限的十六进制数，比如1A2b3c，我们可以这样写：[0-9a-fA-F]，它表示一共可以匹配以下任意范围的字符：

	0-9：字符0~9；
	a-f：字符a~f；
	A-F：字符A~F。

如果要匹配6位十六进制数，前面讲过的{n}仍然可以继续配合使用：[0-9a-fA-F]{6}。

[...]还有一种排除法，即不包含指定范围的字符。假设我们要匹配任意字符，但不包括数字，可以写[^1-9]{3}：

	可以匹配"ABC"，因为不包含字符1~9；
	可以匹配"A00"，因为不包含字符1~9；
	不能匹配"A01"，因为包含字符1；
	不能匹配"A05"，因为包含字符5。


----------------------------------


#	或规则匹配

用'|'连接的两个正则规则是或规则，例如，'AB|CD'表示可以匹配AB或CD。

我们来看这个正则表达式java|php：	*/
import java.util.regex.*;

public class Main {
	public static void main(String[] args) {
		String re = "java|php";

		System.out.println("java".matches(re));
		System.out.println("php".matches(re));
		System.out.println("go".matches(re));
	}
}

/*
它可以匹配"java"或"php"，但无法匹配"go"。

要把go也加进来匹配，可以改写为java|php|go。


----------------------------------------------


#	使用括号(子规则,也可：子中子规则)

现在我们想要匹配字符串learn java、learn php和learn go怎么办？一个最简单的规则是learn\sjava|learn\sphp|learn\sgo，但是这个规则太复杂了，可以把公共部分提出来，然后用(...)把子规则括起来表示成learn\\s(java|php|go)。 */
import java.util.regex.*;

public class Main {
	public static void main(String[] args) {
		String re = "learn\\s(java|php|go)";

		System.out.println("learn java".matches(re)); // true
		System.out.println("learn Java".matches(re)); // false
		System.out.println("learn php".matches(re)); // true
		System.out.println("learn Go".matches(re)); // false
	}
}

// 上面的规则仍然不能匹配learn Java、learn Go这样的字符串。试修改正则，使之能匹配大写字母开头的learn Java、learn Php、learn Go。





/*	--- 匹配规则 の 小结 --- 

复杂匹配规则主要有：

->	正则表达式		规则					可以匹配
	^				开头					字符串开头
	$				结尾					字符串结束
	[ABC]			[…]内任意字符		A，B，C
	[A-F0-9xy]		指定范围的字符		A，……，F，0，……，9，x，y
	[^A-F]			指定范围外的任意字符	非A~F
	AB|CD|EF		AB或CD或EF			AB，CD，EF



*/


































